3 - 1.3 IPC: Betriebssytemschnittstelle zur IPC [ID:22434]
50 von 103 angezeigt

Nachdem wir jetzt wissen, welche Arten der Netzwerkkommunikation es gibt, wollen wir

uns nun anschauen, wie dies in der Praxis aussieht.

Das heißt, wie wir aus unserem Programm auf einen Server zugreifen können.

Der Mechanismus, der uns dafür an die Hand gegeben wird, sind Sockets.

Mit einem Socket können wir mit einem Server kommunizieren.

Dabei spielt es keine Rolle, ob man mit dem Socket nun über ein Netzwerk kommuniziert

oder innerhalb eines Systems bleibt.

Es ist also transparent, ob man nun UNIX Sockets oder TCP oder UDP Sockets nutzt.

Nur beim Verbindungsaufbau muss man sich zwischen der Implementierung entscheiden.

Die weitere Benutzung, also die Kommunikation mit dem Server, bleibt in allen Fällen gleich.

Ein Socket kann nun also mit dem Systemaufruf Socket erstellt werden.

Der Systemaufruf erwartet drei Argumente.

Das erste ist Domain.

Damit kann entschieden werden, ob dies nun ein lokales Socket ist, also ein UNIX Socket,

oder ob man sich in der IPv4 oder IPv6 Domäne befindet.

Wählt man IPv6 aus, ist dies meist abwärtskompatibel zu IPv4.

Das nächste Argument ist der Typ.

Hier kann man entscheiden, ob man einen verbindungs- oder ein paketorientierter Socket haben möchte.

Das Argument SOC Stream ist für das verbindungsorientierte Socket,

während SOC DGram für das paketorientierte ist.

Und so guter Letzt das Protokoll.

Hier kann man noch weitere Einstellungen vornehmen, um bestimmte Protokolle auszuwählen.

Gibt man jedoch eine Null ein, wird das Standardprotokoll für die gewählte Kombination ausgewählt.

Im Falle von IPv4 und IPv6 Sockets in Kombination mit dem Typ SOC Stream, ist dies zum Beispiel TCP IP.

Das heißt das TCP-Protokoll über IP.

Der Rückgabewert des Systemsaufrufs ist im Erfolgsfall ein Socket Descriptor.

Dieser kann verwendet werden wie ein normaler Dateiltescriptor.

Man kann also den Read- und den Write-Systemaufruf darauf aufführen.

Und wenn man fertig mit der Kommunikation ist, kann man diesen auch mit Close wieder schließen.

Mit einem Socket haben wir nun aber erst die Grundlage für die Kommunikation mit einem Server geschaffen.

Was noch fehlt, ist der tatsächliche Verbindungsaufbau.

Dies geschieht mit dem Connect-Systemaufruf.

Dieser erwartet selbst wieder drei Argumente.

Wir haben einmal das erste Argument SOC FD.

Was der Socket ist, über den wir kommunizieren wollen.

Das zweite Argument ADR ist ein Zeigeauf einer Struktur.

ADR beinhaltet die IP-Adresse und den Port des Servers, die man kennen muss, um sich mit dem Server zu verbinden.

Und schließlich noch ADR-Leng, was die Größe des Typs hinter dem Zeige ADR beschreibt.

Die Größe ist notwendig, da für die einzelnen Sockets die Verbindungsinformationen jeweils unterschiedlich groß sind.

So beinhaltet die Struktur zum Beispiel für Unix-Sockets einen Dateipfad, während im Falle von IPv4 und IPv6 jeweils die Adresse und der Port darin enthalten sind.

Wenn der Systemaufruf ausgeführt wird, dann blockiert dieser.

Und zwar solange, bis entweder eine Verbindung zu dem Server hergestellt werden konnte oder ein Fehler aufgetreten ist.

Im Erfolgsfall kann das Socket nach Zurückkehren des Connect-Systemaufrufs genutzt werden.

Wenn wir nun über ein Netzwerk kommunizieren wollen, dann brauchen wir für den Connect-Systemaufruf bereits die Adresse und den Port, auf den wir uns verbinden wollen.

Diese sind gespeichert in dem Strukt SOC ADR.

Um diese Verbindungsdetails zu ermitteln, können wir nun eine DNS-Abfrage starten.

Dies geschieht mit der Funktion getAdrInfo.

Mit der Funktion getAdrInfo können wir als erstes Argument den DNS-Namen des Hosts angeben, auf den wir uns verbinden wollen.

Dies ist ein String, zum Beispiel xkcd.com.

Falls wir aber doch die IP-Adresse wissen, können wir auch diese angeben.

Teil einer Videoserie :

Zugänglich über

Offener Zugang

Dauer

00:08:46 Min

Aufnahmedatum

2020-11-01

Hochgeladen am

2020-11-02 00:07:13

Sprache

de-DE

Einbetten
Wordpress FAU Plugin
iFrame
Teilen